export {}
// ts是结构化的类型系统
// 具有相同的结构,可以相互赋值
// 对象的兼容性 对象多的类型属性可以赋值给对象少的类型属性,前提多的类型属性必须要有这个少的类型属性中的属性!可以多!但不可以少
// 对象类型
type CustomObj = {
  name: string,
  age:number,
  sex:string,
  address:string,
  salary:string
}

let p1: CustomObj = {
  name:'zs',
  age:18,
  sex:'女',
  address:'shanghai',
  salary:'70k'
}

type CustomObj2 = {
  name: string,
  age:number,
  sex:string
}

let p2:CustomObj2 = p1



// 函数类型
// 函数类型的类型兼容性比较复杂,需要考虑:1.参数个数 2返回值等等
const arr = ['a','b','c']
arr.forEach(()=>{})
arr.forEach((item)=>{})
arr.forEach((item,index)=>{})
arr.forEach((item,index,array)=>{})

type F1 = (a:number) => void
type F2 = (a:number,b:number,c:string) => void

//函数参数的兼容性,参数少的可以赋值给参数多的,只要结构一样,参数小于即可,参数不同也可!
let func:F1 = (a:number) =>{
   return a  //因为是void所以说返回什么都不会造成影响
}

let func2:F2 = func

console.log(func2(1,1,'2'))   //1  虽然传递了三个参数,但是由于是func赋值给它的,所以它只输出了func的函数返回值

// 返回值  要求void 可以返回 其他值
// 返回值  要求其他值? 必须返回
